11. 类函数声明
类函数
要在 Matrix 类中编写函数,首先需要声明这些函数。对于 Matrix 类,你可以将这些函数看作属于三个独立的类别:
- 构造函数
- set 和 get 函数
- Matrix 功能函数
声明这些函数的方法和前一课中声明函数一样。不同的是,现在你必须决定某个函数是私有的、受保护的还是公共的。函数声明在类声明内部。
          你需要在 matrix.cpp 中定义你的函数。但首先,让我们简要地谈一下每种类型的函数。构造函数用于初始化对象。Python 使用
          
           def __init__
          
          语法实现这一功能。C++ 语法有点不同,你将在本课的下一部分中了解这些差异。
         
set 和 get 取函数专门用于访问和赋值给私有变量。因为一个对象不能直接访问私有变量,set 和 get 函数提供了间接访问功能。set 和 get 函数的语法和其他 C++ 函数相同。使用 set 和 get 是面向对象编程的惯例,而不是特定的 C++ 语法。
最后,还有一些由矩阵功能组成的函数,如打印矩阵、矩阵相加、矩阵乘法等等。在练习中,你会执行这些函数。
下面,我们进入到下一部分的练习,学习如何声明和定义 Matrix 构造函数。
Set 和 Get 函数声明
Set 和 Get 函数允许你的对象访问私有变量。对象不能直接访问私有变量,所以需要使用 set 和 get 函数。本课前面的 Gaussian 对象展示了具体实现方法。
以下是 set 和 get 函数的声明:
class Gaussian
{
    private:
        ...
    public:
        ...
        void setMu(float);
        void setSigma2(float);
        float getMu();
        float getSigma2();
     ....
};set 函数改变一个变量的值,而 get 函数则返回一个变量的值。你会注意到,set 和 get 函数的语法与所有常规函数都是一样的。实际上,set 和 get 是约定,而不是 C++ 特有的。传统上,我们将这些函数命名为 getVariablename() 和 setVariablename(),虽然没有明确要求。
你需要将 set 和 get 函数声明为公共的,以便对象可以访问这些函数。
Set 函数
SOLUTION:
- set 函数只改变一个变量的值。
- 空的返回类型意味着函数不返回任何内容。
矩阵功能函数
第三组要声明的函数是用于矩阵功能的。其语法与 get 和 set 函数语法以及任何正常的 C++ 函数完全相同。你需要为输入变量指定返回数据类型、函数名称和数据类型。
例如,Gaussian 类有三个函数:evaluate、multiply 和 add。以下是如何在 gaussian.h 文件中声明这些函数的示范:
class Gaussian
{
    ....
    public:
       ...
        //待评估函数 
        float evaluate (float);
        Gaussian multiply (Gaussian);
        Gaussian add (Gaussian);
};在 Matrix 类中声明函数
现在,轮到你在 matrix.h 文件中声明函数了。在下面的 matrix.h 文件中填充 TODO 部分。答案在代码下面。
Start Quiz:
参考答案
# include <vector>
class Matrix 
{
        private:
            std::vector< std::vector<float> > grid;
            std::vector<int>::size_type rows;
            std::vector<int>::size_type cols;
        public:
            // constructor function declarations
            矩阵
            Matrix (std::vector< std::vector<float> >);
            // set and get function declarations
            void setGrid(std::vector< std::vector<float> >);
            std::vector< std::vector<float> > getGrid();
            std::vector<int>::size_type getRows();
            std::vector<int>::size_type getCols();
            // matrix function declarations
            std::vector< std::vector<float> > matrix_transpose();
            std::vector< std::vector<float> > matrix_addition(Matrix);
            void matrix_print();  
};定义函数
在下一节中,你将在 matrix.cpp 文件中定义所有这些函数。